package Net::OpenID::Server::Standalone::Config;

use strict;
use warnings;

our $config;

=pod

=head1 NAME

  Net::OpenID::Server::Standalone::Config - configuration package for Nossa

=head1 SYNOPSIS

used internally by Net::OpenID::Server::Standalone. The only sub is:

=head2 get( @args )

follows your $config as a hash of hashes consequentially.

=head2 $config

used to store all your configuration like this:
     
  our $config = {
    #users stuff
    users => {

      # nickname is a key
      'the_your_nickname' => {

        # hashFunction from password, MD5 by default
        pass        => 'md5_base64 of your password',

        # OpenID URL
        url         => 'http://your.openid.url/',

        # function to recognise sites that you trust to be asking about your
        # OpenID, you'd be asked about it otherwise.
        trust_root  => sub{
                            shift =~ m/(blogger\.com|cpan\.org|ccmixter\.org
                                        |stickr\.com|mychores\.co\.uk\/openid
                                        |qdos\.com|demand-openid\.rpxnow\.com
                                        |livejournal\.com|sourceforge\.net
                                        )\/?$/x;
                        },

        # http://openid.net/specs/\
        # openid-simple-registration-extension-1_0.html
        sre         => {
          'sreg.nickname'     => 'nickname_for_outside_world',
          'sreg.fullname'     => 'Your Fullname',
        },
      },
    },

    # Where to redirect in case of wrong login/pass or the wrong OpenID url
    setupUrl => '/setup',

    # your id script URL
    idSvrUrl => '/id',

    # your OpenID server key
    serverSecret => 'some_random_sequence_put_your_own',

    # whether to redirect a user to the SSL URL of id
    requireSsl=> 0,

    # arguments for L<CGI::Session>
    session  =>  {
      dsn  =>"driver:DB_File;serializer:FreezeThaw",
      name  => 'nossa_cookie',
      expire  => '+1h',
    },

    # arguments for L<CGI::Session> storage to be used for nonce
    nonce  =>  {
      dsn  =>"driver:DB_File;serializer:FreezeThaw",
      name  => 'nossa_nonce',
      FileName => 'cgisess_nonce.db',
      expire  => '+14d',
    },
  };

=head1 ETCETERA

is at L<Net::Server::OpenID::Standalone>.

=cut

###  No user-serviceable part below this line ###

sub get {
    my $pkg = shift if ( $_[0] eq __PACKAGE__ ) or defined ref $_[0];
    no strict 'refs';
    my $rv = ${ *{ $pkg . '::' }->{ 'config' } };
    use strict 'refs';
    if ( @_ > 0 ) {
        while ( $_ = shift @_ ) {
            if ( defined $rv->{ $_ } ) {
                $rv = $rv->{ $_ };
            }
            else {
                $rv = undef;
                last;
            }
        }
    }
    return $rv;
}

1;
